/*
    SUSAN® - Sole of Unix Save ANything

   Copyright (C) 2020-2020 Hechzh Property

   
*/

#ifndef BAREOS_SRC_DIRD_DBCOPY_COLUMN_DESCRIPTION_H_
#define BAREOS_SRC_DIRD_DBCOPY_COLUMN_DESCRIPTION_H_

#include <functional>
#include <map>
#include <string>

struct DatabaseField;
class BareosDb;

class ColumnDescription {
 public:
  ColumnDescription(const std::string& column_name_in,
                    const std::string& column_name_lower_case_in,
                    const char* data_type_in,
                    const char* max_length_in);
  virtual ~ColumnDescription() = default;
  ColumnDescription() = delete;

  using ConverterCallback = std::function<void(BareosDb*, DatabaseField&)>;
  using DataTypeConverterMap = std::map<std::string, ConverterCallback>;

  void RegisterConverterCallbackFromMap(const DataTypeConverterMap&);

  std::string column_name;
  std::string column_name_lower_case;
  std::string data_type;
  std::size_t character_maximum_length{};

  ConverterCallback converter{};
};

#endif  // BAREOS_SRC_DIRD_DBCOPY_COLUMN_DESCRIPTION_H_
